Content streaming, such as the streaming of audio, video, and/or text media content is becoming increasingly popular. The term “streaming” is typically used to indicate that the data representing the media is provided over a network to a client computer and the client computer renders the streaming content as it is received from a network server, rather than waiting for an entire “file” to be delivered.
The increasing availability of streaming media content enables a variety of informational content that was not previously available over the Internet or other computer networks. Live content is one significant example of such content. Using streaming media content, audio, video, or audio/visual coverage of noteworthy events can be broadcast over the Internet as the events unfold. Similarly, television and radio stations can transmit their live content over the Internet.
Currently, streaming media content is streamed using the concept of “just in time delivery”. The content is delivered to the client at the content's encoded bit rate for playback on the client. Some buffering of the streaming media content does occur (e.g., to allow for lost data that needs to be retransmitted and other network inconsistencies). However, current client systems typically attempt to minimize the amount of buffering performed on the client, thereby reducing the memory requirements on the client as well as reducing the startup latency due to buffering.
However, current streaming media content and buffering systems suffer from not having functionality that other types of content playback systems have. For example, a television program recorded on a VCR can be rewound by the user and previously viewed portions readily watched repeatedly, or watched at a later time as the user desires. Current streaming media content scenarios, however, do not allow such actions to be performed by the user. Rather, rewinding streaming media content would involve stopping and re-starting the streaming of the content at a new location (and thus re-buffering the stream starting at the new location), and a user typically cannot watch streaming media content at a later time—the content is played for the user as it is received and if the user desires to watch the content at the later time he or she must have the content streamed to him or her at that later time.
The client-side caching of streaming media content described below solves these and other problems.